package org.study.module.common;

import org.study.entity.ClusterInfoEntity;
import org.study.entity.ClusterModuleInfoEntity;
import org.study.module.hadoop.HadoopShell;
import org.study.shell.ShellFile;

import java.util.ArrayList;
import java.util.List;

public class ModuleCommon {
    /**
     * 添加属性
     *
     * @param name     属性名称
     * @param value    属性值
     * @param configs 配置列表
     */
    public static void addProperty(String name, String value, List<String> configs) {
        configs.add("    <property>");
        configs.add("        <name>" + name + "</name>");
        configs.add("        <value>" + value + "</value>");
        configs.add("    </property>");
    }
    /**
     * 添加配置头文件信息
     *
     * @param configs 配置列表
     */
    public static void addConfigHead(List<String> configs) {
        configs.add("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        configs.add("<?xml-stylesheet type=\"text/xsl\" href=\"configuration.xsl\"?>");
        configs.add("<configuration>");
    }

    /**
     * 添加配置尾部信息
     *
     * @param configs 配置信息列表
     */
    public static void addConfigEnd(List<String> configs) {
        configs.add("</configuration>");
        configs.add("EOF");
    }

    /**
     * 安装tar的命令
     * @param infoEntity 集群信息
     * @param moduleMode 组件信息
     */
    public static List<String> installByTar(ClusterInfoEntity infoEntity, ClusterModuleInfoEntity moduleMode) {
        List<String> commands = new ArrayList<>();
        String installPath = infoEntity.getInstallPath()+"/"+moduleMode.getModuleName();
        commands.addAll(ShellFile.createPath(installPath));
        String name = moduleMode.getModuleName()+"-"+moduleMode.getVersion();
        commands.addAll(ShellFile.findByName(infoEntity.getUploadPath()+"/software", name, moduleMode.getModuleName()+"_tar"));
        commands.add("tar -xzvf $jdk_tar -C " + installPath);
        commands.add("cd " + installPath);
        commands.addAll(ShellFile.findByName(installPath, name, moduleMode.getModuleName()+"_install"));
        commands.add("echo \"修改文件权限,755方便其他用户有权限执行\"");
        commands.add("sudo chmod -R 755 " + installPath);
        return commands;
    }

    public static List<String> configAppend(List<String> configs,String fileName){
        List<String> commands = new ArrayList<>();
        //查找指定字符的行号
        commands.add("lin=`"+ShellFile.sedFindLineNum("<\\/configuration>",fileName)+"`");
        //在指定行之前插入文字
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < configs.size(); i++){
            sb.append(configs.get(i));
            if(i != configs.size()-1){
                sb.append("\\n");
            }
        }
        commands.add(ShellFile.replaceContent("$line i "+sb.toString(),fileName));
        return commands;
    }

}
